// 导出basic widget(component)
const widgetComponent = {
  layouts: [],
  settings: []
};

const widgetFiles = require.context('./', true, /Layout.vue$/);
const settingFiles = require.context('./', true, /Setting.vue$/);

widgetFiles.keys().forEach((k) => {
  new RegExp(/^\.\/(.*)\/(.*)Layout\.vue$/).test(k);
  const name = RegExp.$1;
  widgetComponent.layouts[name] = widgetFiles(k).default;
});

settingFiles.keys().forEach((k) => {
  new RegExp(/^\.\/(.*)\/(.*)Setting\.vue$/).test(k);
  const name = RegExp.$1;
  widgetComponent.settings[name] = settingFiles(k).default;
});
//  这段代码通过遍历一个对象 settingFiles 的所有键（即文件名），然后通过正则表达式匹配出该文件名中第一组圆括号中的内容作为 name，并将对应文件中的 default 成员赋值给 widgetComponent.settings 对象中的属性，该属性的名称即为 name。

// 具体来说，正则表达式 /^\.\/(.*)\/(.*)Setting\.vue$/ 匹配以 ./ 开头，中间包含任意数量字符的一组括号，然后是一个斜杠 /，再是中间包含任意数量字符的第二组括号，最后是 Setting.vue 结尾的字符串。它匹配的文件名应该是这样的形式：./[name]/[name]Setting.vue。

// 这种命名形式下，可以在 widgetComponent.settings 中按照组件名称（即 [name]）来查找对应的设置组件。例如，如果文件名是 ./foo/fooSetting.vue，则 widgetComponent.settings.foo 就是这个设置组件的代表对象,

export default widgetComponent;
